# AutoHideCursor Plugin para VisualNEO Win

## Descripción General
El plugin **AutoHideCursor** oculta automáticamente el cursor del mouse después de un período de inactividad y lo muestra nuevamente cuando el mouse se mueve. Es perfecto para reproducción de video, visualización de imágenes, presentaciones y cualquier aplicación donde desees que el cursor desaparezca durante períodos de inactividad.

## Características
- ✅ Ocultación automática del cursor después de un tiempo configurable
- ✅ Reaparición instantánea del cursor al mover el mouse
- ✅ Seguimiento global del mouse (funciona en cualquier parte de la pantalla)
- ✅ Control manual del cursor (ocultar/mostrar bajo demanda)
- ✅ Tiempo de espera ajustable sin necesidad de reiniciar
- ✅ Variables de estado para lógica de scripts
- ✅ Limpieza automática al salir del programa

## Instalación

### Método 1: Compilar desde el Código Fuente
1. Abre **AutoHideCursor.pb** en PureBasic
2. Configura las opciones del compilador:
   - **Formato**: Shared DLL
   - **Arquitectura**: x86 (32-bit)
   - **Conjunto de caracteres**: ASCII
3. Compila el DLL
4. Renombra **AutoHideCursor.dll** a **AutoHideCursor.nbp**
5. Copia a tu carpeta de **PlugIns** de VisualNEO Win
   - Por defecto: `C:\Program Files\VisualNEOWin\PlugIns\`

### Método 2: Instalar Pre-compilado
1. Copia **AutoHideCursor.nbp** a la carpeta de **PlugIns** de VisualNEO Win
2. Reinicia VisualNEO Win o usa **Opciones → Instalar Plug-Ins**

## Comandos

### 1. startAutoHideCursor
**Sintaxis**: `startAutoHideCursor "[tiempo_ms]"`

Inicia la funcionalidad de auto-ocultación con el tiempo de espera especificado.

**Parámetros**:
- `tiempo_ms` - Tiempo en milisegundos antes de que se oculte el cursor (ej: 3000 = 3 segundos)

**Ejemplo**:
```
startAutoHideCursor "3000"    . Ocultar después de 3 segundos
startAutoHideCursor "5000"    . Ocultar después de 5 segundos
startAutoHideCursor "1500"    . Ocultar después de 1.5 segundos
```

---

### 2. stopAutoHideCursor
**Sintaxis**: `stopAutoHideCursor`

Detiene la funcionalidad de auto-ocultación y asegura que el cursor sea visible.

**Parámetros**: Ninguno

**Ejemplo**:
```
stopAutoHideCursor
```

---

### 3. setAutoHideTimeout
**Sintaxis**: `setAutoHideTimeout "[tiempo_ms]"`

Cambia el valor de tiempo de espera sin detener y reiniciar la función de auto-ocultación.

**Parámetros**:
- `tiempo_ms` - Nuevo tiempo de espera en milisegundos

**Ejemplo**:
```
setAutoHideTimeout "2000"    . Cambiar a 2 segundos
setAutoHideTimeout "10000"   . Cambiar a 10 segundos
```

---

### 4. hideCursorNow
**Sintaxis**: `hideCursorNow`

Oculta inmediatamente el cursor sin esperar el tiempo de espera. El cursor reaparecerá cuando el mouse se mueva si la auto-ocultación está activa.

**Parámetros**: Ninguno

**Ejemplo**:
```
hideCursorNow
```

---

### 5. showCursorNow
**Sintaxis**: `showCursorNow`

Muestra inmediatamente el cursor.

**Parámetros**: Ninguno

**Ejemplo**:
```
showCursorNow
```

## Variables de Estado

El plugin establece dos variables de VisualNEO Win que puedes usar en tus scripts:

### [AutoHideCursorActive]
- **Valores**: "True" o "False"
- **Descripción**: Indica si el monitoreo de auto-ocultación está actualmente activo

### [CursorVisible]
- **Valores**: "True" o "False"
- **Descripción**: Indica si el cursor está actualmente visible

**Ejemplo de Uso**:
```
. Verificar si auto-ocultar está funcionando
If "[AutoHideCursorActive]" "=" "True"
    AlertBox "Info" "Auto-ocultar está actualmente activo"
EndIf

. Verificar visibilidad del cursor
If "[CursorVisible]" "=" "False"
    . El cursor está oculto - tal vez mostrarlo para interacción del usuario
    showCursorNow
EndIf
```

## Ejemplos de Uso

### Ejemplo 1: Reproductor de Video
```
. Cuando el video comienza a reproducirse
startAutoHideCursor "3000"

. Cuando el video se detiene o pausa
stopAutoHideCursor
```

### Ejemplo 2: Presentación de Imágenes
```
. Iniciar presentación con auto-ocultación
startAutoHideCursor "4000"

. Mostrar temporalmente el cursor para controles del usuario
showCursorNow

. Ocultar nuevamente inmediatamente
hideCursorNow

. Finalizar presentación
stopAutoHideCursor
```

### Ejemplo 3: Modo de Presentación
```
. Entrar en modo presentación con retraso de 5 segundos
startAutoHideCursor "5000"

. Durante la presentación, ajustar tiempo de espera si es necesario
SetVar "[UserTimeout]" "7000"
setAutoHideTimeout "[UserTimeout]"

. Salir del modo presentación
stopAutoHideCursor
```

### Ejemplo 4: Auto-Ocultación Condicional
```
. Solo habilitar auto-ocultación si la preferencia del usuario está establecida
If "[UserPreferences.AutoHideCursor]" "=" "Si"
    startAutoHideCursor "3000"
EndIf

. Más tarde, verificar estado
If "[AutoHideCursorActive]" "=" "True"
    . Auto-ocultar está funcionando
    SetVar "[StatusMessage]" "El cursor se ocultará automáticamente"
Else
    SetVar "[StatusMessage]" "Auto-ocultar deshabilitado"
EndIf
```

### Ejemplo 5: Aplicación en Pantalla Completa
```
. En PageEnter para página de pantalla completa
startAutoHideCursor "2000"

. Al hacer clic en botón - mostrar temporalmente el cursor
OnClick:
    showCursorNow
    . Hacer algo...
    . El cursor se ocultará automáticamente después de 2 segundos sin movimiento

. En PageLeave
stopAutoHideCursor
```

## Cómo Funciona

### Detalles Técnicos
1. **Hook del Mouse**: Usa el hook de mouse de bajo nivel de Windows (`WH_MOUSE_LL`) para monitorear todos los movimientos del mouse globalmente
2. **Sistema de Temporizador**: Implementa un temporizador preciso para rastrear períodos de inactividad
3. **API del Cursor**: Usa la API de Windows `ShowCursor()` para ocultar/mostrar
4. **Seguro para Hilos**: Todas las operaciones son seguras para hilos y no entrarán en conflicto con VisualNEO Win
5. **Auto-Limpieza**: Libera automáticamente todos los hooks y recursos cuando VisualNEO Win se cierra

### Rendimiento
- Uso mínimo de CPU - solo procesa eventos de movimiento del mouse
- Sin sondeo - arquitectura basada en eventos
- La limpieza automática previene fugas de memoria
- Funciona perfectamente con el sistema de eventos de VisualNEO Win

## Solución de Problemas

### El Cursor No Se Oculta
- **Verifica el valor de tiempo de espera**: Asegúrate de estar usando milisegundos (3000 = 3 segundos, no 3)
- **Verifica que auto-ocultar esté iniciado**: Usa la variable `[AutoHideCursorActive]`
- **Mueve el mouse completamente quieto**: Cualquier movimiento pequeño reinicia el temporizador

### El Cursor No Se Muestra de Vuelta
- **Mueve el mouse**: Incluso un movimiento diminuto activará que el cursor se muestre
- **Forzar mostrar**: Usa el comando `showCursorNow`
- **Detener y reiniciar**: Intenta `stopAutoHideCursor` luego `startAutoHideCursor "3000"`

### El Plugin No Aparece en VisualNEO Win
- **Verifica la extensión del archivo**: Debe ser .nbp (no .dll)
- **Verifica la ubicación**: Debe estar en la carpeta PlugIns de VisualNEO Win
- **Reinstalar**: Usa el menú Opciones → Instalar Plug-Ins
- **Reiniciar**: Reinicia VisualNEO Win después de la instalación

## Mejores Prácticas

### 1. Siempre Detener al Salir de la Página
```
. En PageLeave
stopAutoHideCursor
```
Esto asegura transiciones de estado limpias entre páginas.

### 2. Usa Tiempos de Espera Razonables
- **Muy corto** (<1000ms): El cursor parpadeará, molesto para los usuarios
- **Muy largo** (>10000ms): Derrota el propósito
- **Recomendado**: 2000-5000ms (2-5 segundos)

### 3. Proporciona Control al Usuario
Permite a los usuarios habilitar/deshabilitar o ajustar el tiempo de espera:
```
. Página de configuración
SetVar "[UserTimeout]" "3000"  . Por defecto 3 segundos
. ... el usuario ajusta con control deslizante o campo de entrada ...

. Aplicar configuración
startAutoHideCursor "[UserTimeout]"
```

### 4. Verifica el Estado Antes de las Acciones
```
. Antes de ocultar el cursor manualmente
If "[CursorVisible]" "=" "True"
    hideCursorNow
EndIf
```

### 5. Combina con Otras Características
```
. Al entrar en modo pantalla completa de video
SetVar "[PrevCursorState]" "[CursorVisible]"
startAutoHideCursor "3000"
. ... maximizar ventana, ocultar controles, etc ...

. Al salir de pantalla completa
stopAutoHideCursor
If "[PrevCursorState]" "=" "False"
    hideCursorNow  . Restaurar estado anterior
EndIf
```

## Compatibilidad
- ✅ Windows XP y superior
- ✅ VisualNEO Win 4.0 y superior
- ✅ Funciona tanto en desarrollo como en publicaciones compiladas
- ✅ Compatible con todos los objetos y acciones de VisualNEO Win

## Historial de Versiones

### Versión 1.0 (2024)
- Lanzamiento inicial
- 5 comandos: start, stop, setTimeout, hideNow, showNow
- 2 variables de estado
- Seguimiento global del mouse
- Limpieza automática

## Créditos
**Autor**: Anthony C  
**Lenguaje**: PureBasic 6.21  
**Licencia**: Freeware (Gratis)  
**Soporte**: Para preguntas o problemas, contacta a través de los foros de VisualNEO Win

## Notas
- La ocultación del cursor es a nivel de sistema cuando está activada, no solo dentro de la ventana de VisualNEO Win
- Mover el mouse incluso 1 píxel mostrará el cursor nuevamente
- Múltiples llamadas a `startAutoHideCursor` reiniciarán el monitoreo con el nuevo tiempo de espera
- El plugin se limpia automáticamente cuando VisualNEO Win se cierra o la publicación se cierra

---

**¡Disfruta usando AutoHideCursor! Perfecto para crear experiencias de visualización profesionales y sin distracciones.**
